The security of many systems, such as cryptographic systems, relies on unpredictability and irreproducibility of digital key-streams that are used for encryption and/or signing of confidential information. There are at least two fundamentally different strategies for generating random bits. One strategy is to compute numbers deterministically using, for example, a software-implemented algorithm that requires an initial input seed value. This class of random number generators may be known as deterministic random number generators (DRNGs) pseudo random number generators (PRNGs). DRNGs must be provided with a random initialization value (seed) to produce an output value that resembles a random bit-stream. PRNGs are periodic, although the periods are typically very long.
Another strategy is to produce bits non-deterministically, where every bit of output is based on a physical process that is unpredictable. Such physical processes may be based, for example, on the production of thermal (resistance or shot) noise. This class of random number generators (RNGs) may be referred to as true random number generators (TRNGs). True random number generators may experience temporary failures in which the TRNG circuit's ability to harvest entropy is reduced. Such failures may result from cross-capacitance due to neighboring circuits, temperature variations, etc. Some implementations may include logic that further processes the output bit stream from the TRNG to alleviate these sorts of failures. However, these post processing logic units may themselves experience failures. For example, a Von-Neuman corrector may be incapable of generating any output if the TRNG supplies the corrector a stream of N 0's (N is greater than 1). An entropy accumulator can be used which determines an exclusive-OR of the output of multiple TRNG circuits. However, an entropy accumulator may be relatively slow.